Code coverage report for src/view-engine.js

Statements: 31.25% (25 / 80)      Branches: 0% (0 / 16)      Functions: 42.31% (11 / 26)      Lines: 32.05% (25 / 78)      Ignored: none     

All files » src/ » view-engine.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 1641     1   1   1               1   1   1   1   16 16   1   2   1 1   2     1   1 1                   1       1                                 1                                         1                                 1                                                                                               1     1        
System.register(['core-js', 'aurelia-logging', 'aurelia-metadata', 'aurelia-loader', 'aurelia-dependency-injection', './view-compiler', './resource-registry', './module-analyzer'], function (_export) {
  'use strict';
 
  var core, LogManager, Origin, Loader, TemplateRegistryEntry, Container, ViewCompiler, ResourceRegistry, ViewResources, ModuleAnalyzer, logger, ViewEngine;
 
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
 
  function ensureRegistryEntry(loader, urlOrRegistryEntry) {
    if (urlOrRegistryEntry instanceof TemplateRegistryEntry) {
      return Promise.resolve(urlOrRegistryEntry);
    }
 
    return loader.loadTemplate(urlOrRegistryEntry);
  }
 
  return {
    setters: [function (_coreJs) {
      core = _coreJs['default'];
    }, function (_aureliaLogging) {
      LogManager = _aureliaLogging;
    }, function (_aureliaMetadata) {
      Origin = _aureliaMetadata.Origin;
    }, function (_aureliaLoader) {
      Loader = _aureliaLoader.Loader;
      TemplateRegistryEntry = _aureliaLoader.TemplateRegistryEntry;
    }, function (_aureliaDependencyInjection) {
      Container = _aureliaDependencyInjection.Container;
    }, function (_viewCompiler) {
      ViewCompiler = _viewCompiler.ViewCompiler;
    }, function (_resourceRegistry) {
      ResourceRegistry = _resourceRegistry.ResourceRegistry;
      ViewResources = _resourceRegistry.ViewResources;
    }, function (_moduleAnalyzer) {
      ModuleAnalyzer = _moduleAnalyzer.ModuleAnalyzer;
    }],
    execute: function () {
      logger = LogManager.getLogger('templating');
 
      ViewEngine = (function () {
        function ViewEngine(loader, container, viewCompiler, moduleAnalyzer, appResources) {
          _classCallCheck(this, ViewEngine);
 
          this.loader = loader;
          this.container = container;
          this.viewCompiler = viewCompiler;
          this.moduleAnalyzer = moduleAnalyzer;
          this.appResources = appResources;
        }
 
        ViewEngine.inject = function inject() {
          return [Loader, Container, ViewCompiler, ModuleAnalyzer, ResourceRegistry];
        };
 
        ViewEngine.prototype.loadViewFactory = function loadViewFactory(urlOrRegistryEntry, compileOptions, associatedModuleId) {
          var _this = this;
 
          return ensureRegistryEntry(this.loader, urlOrRegistryEntry).then(function (viewRegistryEntry) {
            if (viewRegistryEntry.onReady) {
              return viewRegistryEntry.onReady;
            }
 
            return viewRegistryEntry.onReady = _this.loadTemplateResources(viewRegistryEntry, associatedModuleId).then(function (resources) {
              viewRegistryEntry.setResources(resources);
              var viewFactory = _this.viewCompiler.compile(viewRegistryEntry.template, resources, compileOptions);
              viewRegistryEntry.setFactory(viewFactory);
              return viewFactory;
            });
          });
        };
 
        ViewEngine.prototype.loadTemplateResources = function loadTemplateResources(viewRegistryEntry, associatedModuleId) {
          var resources = new ViewResources(this.appResources, viewRegistryEntry.id),
              dependencies = viewRegistryEntry.dependencies,
              importIds,
              names;
 
          if (dependencies.length === 0 && !associatedModuleId) {
            return Promise.resolve(resources);
          }
 
          importIds = dependencies.map(function (x) {
            return x.src;
          });
          names = dependencies.map(function (x) {
            return x.name;
          });
          logger.debug('importing resources for ' + viewRegistryEntry.id, importIds);
 
          return this.importViewResources(importIds, names, resources, associatedModuleId);
        };
 
        ViewEngine.prototype.importViewModelResource = function importViewModelResource(moduleImport, moduleMember) {
          var _this2 = this;
 
          return this.loader.loadModule(moduleImport).then(function (viewModelModule) {
            var normalizedId = Origin.get(viewModelModule).moduleId,
                resourceModule = _this2.moduleAnalyzer.analyze(normalizedId, viewModelModule, moduleMember);
 
            if (!resourceModule.mainResource) {
              throw new Error('No view model found in module "' + moduleImport + '".');
            }
 
            resourceModule.analyze(_this2.container);
 
            return resourceModule.mainResource;
          });
        };
 
        ViewEngine.prototype.importViewResources = function importViewResources(moduleIds, names, resources, associatedModuleId) {
          var _this3 = this;
 
          return this.loader.loadAllModules(moduleIds).then(function (imports) {
            var i,
                ii,
                analysis,
                normalizedId,
                current,
                associatedModule,
                container = _this3.container,
                moduleAnalyzer = _this3.moduleAnalyzer,
                allAnalysis = new Array(imports.length);
 
            //analyze and register all resources first
            //this enables circular references for global refs
            //and enables order independence
            for (i = 0, ii = imports.length; i < ii; ++i) {
              current = imports[i];
              normalizedId = Origin.get(current).moduleId;
 
              analysis = moduleAnalyzer.analyze(normalizedId, current);
              analysis.analyze(container);
              analysis.register(resources, names[i]);
 
              allAnalysis[i] = analysis;
            }
 
            if (associatedModuleId) {
              associatedModule = moduleAnalyzer.getAnalysis(associatedModuleId);
 
              if (associatedModule) {
                associatedModule.register(resources);
              }
            }
 
            //cause compile/load of any associated views second
            //as a result all globals have access to all other globals during compilation
            for (i = 0, ii = allAnalysis.length; i < ii; ++i) {
              allAnalysis[i] = allAnalysis[i].load(container);
            }
 
            return Promise.all(allAnalysis).then(function () {
              return resources;
            });
          });
        };
 
        return ViewEngine;
      })();
 
      _export('ViewEngine', ViewEngine);
    }
  };
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3RlbXBsYXRpbmcvc3JjL3ZpZXctZW5naW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozt5SUFTSSxNQUFNLEVBVUcsVUFBVTs7OztBQVJ2QixXQUFTLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBQztBQUN0RCxRQUFHLGtCQUFrQixZQUFZLHFCQUFxQixFQUFDO0FBQ3JELGFBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBQzVDOztBQUVELFdBQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0dBQ2hEOzs7Ozs7OztnQ0FmTyxNQUFNOzs4QkFDTixNQUFNOzZDQUFDLHFCQUFxQjs7OENBQzVCLFNBQVM7O21DQUNULFlBQVk7OzJDQUNaLGdCQUFnQjt3Q0FBRSxhQUFhOzt1Q0FDL0IsY0FBYzs7O0FBRWxCLFlBQU0sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQzs7QUFVbEMsZ0JBQVU7QUFFVixpQkFGQSxVQUFVLENBRVQsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBQztnQ0FGL0QsVUFBVTs7QUFHbkIsY0FBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsY0FBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0IsY0FBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDakMsY0FBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDckMsY0FBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7U0FDbEM7O0FBUlUsa0JBQVUsQ0FDZCxNQUFNLEdBQUEsa0JBQUc7QUFBRSxpQkFBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsQ0FB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RUFBRSxFQUFFLENBQUMsRUFBQztBQUM5Qyx5QkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDakQ7O0FBRUQsbUJBQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM7cUJBQU0sU0FBUzthQUFBLENBQUMsQ0FBQztXQUN2RCxDQUFDLENBQUM7U0FDSjs7ZUE3RlUsVUFBVTs7OzRCQUFWLFVBQVUiLCJmaWxlIjoiL1VzZXJzL0Vpc2VuYmVyZ0VmZmVjdC9Eb2N1bWVudHMvR2l0SHViL1RoZSBEdXJhbmRhbCBQcm9qZWN0L2F1cmVsaWEvdGVtcGxhdGluZy9zcmMvdmlldy1lbmdpbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29yZSBmcm9tICdjb3JlLWpzJztcbmltcG9ydCAqIGFzIExvZ01hbmFnZXIgZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcbmltcG9ydCB7T3JpZ2lufSBmcm9tICdhdXJlbGlhLW1ldGFkYXRhJztcbmltcG9ydCB7TG9hZGVyLFRlbXBsYXRlUmVnaXN0cnlFbnRyeX0gZnJvbSAnYXVyZWxpYS1sb2FkZXInO1xuaW1wb3J0IHtDb250YWluZXJ9IGZyb20gJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nO1xuaW1wb3J0IHtWaWV3Q29tcGlsZXJ9IGZyb20gJy4vdmlldy1jb21waWxlcic7XG5pbXBvcnQge1Jlc291cmNlUmVnaXN0cnksIFZpZXdSZXNvdXJjZXN9IGZyb20gJy4vcmVzb3VyY2UtcmVnaXN0cnknO1xuaW1wb3J0IHtNb2R1bGVBbmFseXplcn0gZnJvbSAnLi9tb2R1bGUtYW5hbHl6ZXInO1xuXG52YXIgbG9nZ2VyID0gTG9nTWFuYWdlci5nZXRMb2dnZXIoJ3RlbXBsYXRpbmcnKTtcblxuZnVuY3Rpb24gZW5zdXJlUmVnaXN0cnlFbnRyeShsb2FkZXIsIHVybE9yUmVnaXN0cnlFbnRyeSl7XG4gIGlmKHVybE9yUmVnaXN0cnlFbnRyeSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVnaXN0cnlFbnRyeSl7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1cmxPclJlZ2lzdHJ5RW50cnkpO1xuICB9XG5cbiAgcmV0dXJuIGxvYWRlci5sb2FkVGVtcGxhdGUodXJsT3JSZWdpc3RyeUVudHJ5KTtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZXdFbmdpbmUge1xuICBzdGF0aWMgaW5qZWN0KCkgeyByZXR1cm4gW0xvYWRlciwgQ29udGFpbmVyLCBWaWV3Q29tcGlsZXIsIE1vZHVsZUFuYWx5emVyLCBSZXNvdXJjZVJlZ2lzdHJ5XTsgfVxuICBjb25zdHJ1Y3Rvcihsb2FkZXIsIGNvbnRhaW5lciwgdmlld0NvbXBpbGVyLCBtb2R1bGVBbmFseXplciwgYXBwUmVzb3VyY2VzKXtcbiAgICB0aGlzLmxvYWRlciA9IGxvYWRlcjtcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICB0aGlzLnZpZXdDb21waWxlciA9IHZpZXdDb21waWxlcjtcbiAgICB0aGlzLm1vZHVsZUFuYWx5emVyID0gbW9kdWxlQW5hbHl6ZXI7XG4gICAgdGhpcy5hcHBSZXNvdXJjZXMgPSBhcHBSZXNvdXJjZXM7XG4gIH1cblxuICBsb2FkVmlld0ZhY3RvcnkodXJsT3JSZWdpc3RyeUVudHJ5LCBjb21waWxlT3B0aW9ucywgYXNzb2NpYXRlZE1vZHVsZUlkKXtcbiAgICByZXR1cm4gZW5zdXJlUmVnaXN0cnlFbnRyeSh0aGlzLmxvYWRlciwgdXJsT3JSZWdpc3RyeUVudHJ5KS50aGVuKHZpZXdSZWdpc3RyeUVudHJ5ID0+IHtcbiAgICAgIGlmKHZpZXdSZWdpc3RyeUVudHJ5Lm9uUmVhZHkpe1xuICAgICAgICByZXR1cm4gdmlld1JlZ2lzdHJ5RW50cnkub25SZWFkeTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZpZXdSZWdpc3RyeUVudHJ5Lm9uUmVhZHkgPSB0aGlzLmxvYWRUZW1wbGF0ZVJlc291cmNlcyh2aWV3UmVnaXN0cnlFbnRyeSwgYXNzb2NpYXRlZE1vZHVsZUlkKS50aGVuKHJlc291cmNlcyA9PiB7XG4gICAgICAgIHZpZXdSZWdpc3RyeUVudHJ5LnNldFJlc291cmNlcyhyZXNvdXJjZXMpO1xuICAgICAgICB2YXIgdmlld0ZhY3RvcnkgPSB0aGlzLnZpZXdDb21waWxlci5jb21waWxlKHZpZXdSZWdpc3RyeUVudHJ5LnRlbXBsYXRlLCByZXNvdXJjZXMsIGNvbXBpbGVPcHRpb25zKTtcbiAgICAgICAgdmlld1JlZ2lzdHJ5RW50cnkuc2V0RmFjdG9yeSh2aWV3RmFjdG9yeSk7XG4gICAgICAgIHJldHVybiB2aWV3RmFjdG9yeTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbG9hZFRlbXBsYXRlUmVzb3VyY2VzKHZpZXdSZWdpc3RyeUVudHJ5LCBhc3NvY2lhdGVkTW9kdWxlSWQpe1xuICAgIHZhciByZXNvdXJjZXMgPSBuZXcgVmlld1Jlc291cmNlcyh0aGlzLmFwcFJlc291cmNlcywgdmlld1JlZ2lzdHJ5RW50cnkuaWQpLFxuICAgICAgICBkZXBlbmRlbmNpZXMgPSB2aWV3UmVnaXN0cnlFbnRyeS5kZXBlbmRlbmNpZXMsXG4gICAgICAgIGltcG9ydElkcywgbmFtZXM7XG5cbiAgICBpZihkZXBlbmRlbmNpZXMubGVuZ3RoID09PSAwICYmICFhc3NvY2lhdGVkTW9kdWxlSWQpe1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNvdXJjZXMpO1xuICAgIH1cblxuICAgIGltcG9ydElkcyA9IGRlcGVuZGVuY2llcy5tYXAoeCA9PiB4LnNyYyk7XG4gICAgbmFtZXMgPSBkZXBlbmRlbmNpZXMubWFwKHggPT4geC5uYW1lKTtcbiAgICBsb2dnZXIuZGVidWcoYGltcG9ydGluZyByZXNvdXJjZXMgZm9yICR7dmlld1JlZ2lzdHJ5RW50cnkuaWR9YCwgaW1wb3J0SWRzKTtcblxuICAgIHJldHVybiB0aGlzLmltcG9ydFZpZXdSZXNvdXJjZXMoaW1wb3J0SWRzLCBuYW1lcywgcmVzb3VyY2VzLCBhc3NvY2lhdGVkTW9kdWxlSWQpO1xuICB9XG5cbiAgaW1wb3J0Vmlld01vZGVsUmVzb3VyY2UobW9kdWxlSW1wb3J0LCBtb2R1bGVNZW1iZXIpe1xuICAgIHJldHVybiB0aGlzLmxvYWRlci5sb2FkTW9kdWxlKG1vZHVsZUltcG9ydCkudGhlbih2aWV3TW9kZWxNb2R1bGUgPT4ge1xuICAgICAgdmFyIG5vcm1hbGl6ZWRJZCA9IE9yaWdpbi5nZXQodmlld01vZGVsTW9kdWxlKS5tb2R1bGVJZCxcbiAgICAgICAgICByZXNvdXJjZU1vZHVsZSA9IHRoaXMubW9kdWxlQW5hbHl6ZXIuYW5hbHl6ZShub3JtYWxpemVkSWQsIHZpZXdNb2RlbE1vZHVsZSwgbW9kdWxlTWVtYmVyKTtcblxuICAgICAgaWYoIXJlc291cmNlTW9kdWxlLm1haW5SZXNvdXJjZSl7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gdmlldyBtb2RlbCBmb3VuZCBpbiBtb2R1bGUgXCIke21vZHVsZUltcG9ydH1cIi5gKTtcbiAgICAgIH1cblxuICAgICAgcmVzb3VyY2VNb2R1bGUuYW5hbHl6ZSh0aGlzLmNvbnRhaW5lcik7XG5cbiAgICAgIHJldHVybiByZXNvdXJjZU1vZHVsZS5tYWluUmVzb3VyY2U7XG4gICAgfSk7XG4gIH1cblxuICBpbXBvcnRWaWV3UmVzb3VyY2VzKG1vZHVsZUlkcywgbmFtZXMsIHJlc291cmNlcywgYXNzb2NpYXRlZE1vZHVsZUlkKXtcbiAgICByZXR1cm4gdGhpcy5sb2FkZXIubG9hZEFsbE1vZHVsZXMobW9kdWxlSWRzKS50aGVuKGltcG9ydHMgPT4ge1xuICAgICAgdmFyIGksIGlpLCBhbmFseXNpcywgbm9ybWFsaXplZElkLCBjdXJyZW50LCBhc3NvY2lhdGVkTW9kdWxlLFxuICAgICAgICAgIGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyLFxuICAgICAgICAgIG1vZHVsZUFuYWx5emVyID0gdGhpcy5tb2R1bGVBbmFseXplcixcbiAgICAgICAgICBhbGxBbmFseXNpcyA9IG5ldyBBcnJheShpbXBvcnRzLmxlbmd0aCk7XG5cbiAgICAgIC8vYW5hbHl6ZSBhbmQgcmVnaXN0ZXIgYWxsIHJlc291cmNlcyBmaXJzdFxuICAgICAgLy90aGlzIGVuYWJsZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyBmb3IgZ2xvYmFsIHJlZnNcbiAgICAgIC8vYW5kIGVuYWJsZXMgb3JkZXIgaW5kZXBlbmRlbmNlXG4gICAgICBmb3IoaSA9IDAsIGlpID0gaW1wb3J0cy5sZW5ndGg7IGkgPCBpaTsgKytpKXtcbiAgICAgICAgY3VycmVudCA9IGltcG9ydHNbaV07XG4gICAgICAgIG5vcm1hbGl6ZWRJZCA9IE9yaWdpbi5nZXQoY3VycmVudCkubW9kdWxlSWQ7XG5cbiAgICAgICAgYW5hbHlzaXMgPSBtb2R1bGVBbmFseXplci5hbmFseXplKG5vcm1hbGl6ZWRJZCwgY3VycmVudCk7XG4gICAgICAgIGFuYWx5c2lzLmFuYWx5emUoY29udGFpbmVyKTtcbiAgICAgICAgYW5hbHlzaXMucmVnaXN0ZXIocmVzb3VyY2VzLCBuYW1lc1tpXSk7XG5cbiAgICAgICAgYWxsQW5hbHlzaXNbaV0gPSBhbmFseXNpcztcbiAgICAgIH1cblxuICAgICAgaWYoYXNzb2NpYXRlZE1vZHVsZUlkKXtcbiAgICAgICAgYXNzb2NpYXRlZE1vZHVsZSA9IG1vZHVsZUFuYWx5emVyLmdldEFuYWx5c2lzKGFzc29jaWF0ZWRNb2R1bGVJZCk7XG5cbiAgICAgICAgaWYoYXNzb2NpYXRlZE1vZHVsZSl7XG4gICAgICAgICAgYXNzb2NpYXRlZE1vZHVsZS5yZWdpc3RlcihyZXNvdXJjZXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY2F1c2UgY29tcGlsZS9sb2FkIG9mIGFueSBhc3NvY2lhdGVkIHZpZXdzIHNlY29uZFxuICAgICAgLy9hcyBhIHJlc3VsdCBhbGwgZ2xvYmFscyBoYXZlIGFjY2VzcyB0byBhbGwgb3RoZXIgZ2xvYmFscyBkdXJpbmcgY29tcGlsYXRpb25cbiAgICAgIGZvcihpID0gMCwgaWkgPSBhbGxBbmFseXNpcy5sZW5ndGg7IGkgPCBpaTsgKytpKXtcbiAgICAgICAgYWxsQW5hbHlzaXNbaV0gPSBhbGxBbmFseXNpc1tpXS5sb2FkKGNvbnRhaW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChhbGxBbmFseXNpcykudGhlbigoKSA9PiByZXNvdXJjZXMpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=